home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.sources.misc
- From: Mathew Kimmel <kimmel@umvlsi.ecs.umass.edu>
- Subject: v20i045: ftok - ftok() clone for Coherent, Part01/01
- Message-ID: <1991Jun7.182157.12796@sparky.IMD.Sterling.COM>
- X-Md4-Signature: d7780d390f6d99715394e0694f57b2ff
- Date: Fri, 7 Jun 1991 18:21:57 GMT
- Approved: kent@sparky.imd.sterling.com
-
- Submitted-by: Mathew Kimmel <kimmel@umvlsi.ecs.umass.edu>
- Posting-number: Volume 20, Issue 45
- Archive-name: ftok/part01
- Environment: Coherent
-
- This is a clone of the ftok() function used with interprocess
- communications functions. This is a standard function on most unixes,
- but Coherent lacks it, so I wrote my own version. Basically, what it
- does is return a unique key to be used with the {msg,sem,shm}get
- functions, based on a filename and an integer. For details about the
- algorithm and usage, see the man page and comments at the beginning of
- ftok.c
-
- -Matt
- ---cut here---
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of shell archive."
- # Contents: ftok.c ftok.man
- # Wrapped by kimmel@umvlsi.ecs.umass.edu on Fri Jun 7 01:44:52 1991
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f ftok.c -a "${1}" != "-c" ; then
- echo shar: Will not over-write existing file \"ftok.c\"
- else
- echo shar: Extracting \"ftok.c\" \(1216 characters\)
- sed "s/^X//" >ftok.c <<'END_OF_ftok.c'
- X/* key_t ftok(filename,c) - Create a unique IPC key based on a filename
- X * and an 8-bit number.
- X *
- X * This function takes as parameters a pointer to an ascii string
- X * containing the pathname of a file, and an integer. It then returns
- X * a (hopefully) unique IPC key. The key is a 32-bit integer, and is
- X * constructed as follows: the lower 8 bits are the low 8 bits of c.
- X * The next 8 bits are the low 8 bits of the device descriptor of the
- X * device the file is located on. The upper 16 bits are the inode
- X * of the file.
- X *
- X * This code copyright (c) Matt Kimmel 1991. Permission granted for
- X * unrestricted use in non-commercial products.
- X */
- X#include <sys/ipc.h>
- X#include <sys/stat.h>
- X
- Xkey_t ftok(filename,c)
- Xchar *filename;
- Xint c;
- X{
- X struct stat fs;
- X union {
- X key_t key;
- X struct {
- X char c;
- X char dev;
- X int inode;
- X } info;
- X } keyval;
- X
- X /* First attempt to stat the file */
- X if(stat(filename,&fs) == -1) {
- X perror("ftok");
- X exit(1); /* Best to exit if this happens, or we may have a major IPC collision... */
- X }
- X
- X keyval.info.c = (char)c;
- X keyval.info.dev = (char)fs.st_dev;
- X keyval.info.inode = (int)fs.st_ino;
- X return(keyval.key);
- X}
- X
- END_OF_ftok.c
- if test 1216 -ne `wc -c <ftok.c`; then
- echo shar: \"ftok.c\" unpacked with wrong size!
- fi
- # end of overwriting check
- fi
- if test -f ftok.man -a "${1}" != "-c" ; then
- echo shar: Will not over-write existing file \"ftok.man\"
- else
- echo shar: Extracting \"ftok.man\" \(496 characters\)
- sed "s/^X//" >ftok.man <<'END_OF_ftok.man'
- X.TH ftok
- X.SH USAGE
- X.PP
- Xkey_t ftok(pathname,c);
- Xchar *pathname;
- Xint c;
- X.SH SYNOPSIS
- X.PP
- Xftok() takes as parameters the pathname of
- Xan existing file or directory, and a number.
- XFrom these, it assembles a (hopefully) unique
- Xkey to be used with the interprocess communcation
- Xsystem calls (specifically, msgget(), semget() and
- Xshmget()). The method used for generating this
- Xkey is complex; note, however, that only the lower
- X8 bits of c are used.
- X.SH SEE ALSO
- X.PP
- Xipc.h, msgget(), semget(), shmget()
- END_OF_ftok.man
- if test 496 -ne `wc -c <ftok.man`; then
- echo shar: \"ftok.man\" unpacked with wrong size!
- fi
- # end of overwriting check
- fi
- echo shar: End of shell archive.
- exit 0
-
- exit 0 # Just in case...
- --
- Kent Landfield INTERNET: kent@sparky.IMD.Sterling.COM
- Sterling Software, IMD UUCP: uunet!sparky!kent
- Phone: (402) 291-8300 FAX: (402) 291-4362
- Please send comp.sources.misc-related mail to kent@uunet.uu.net.
-